package com.mason.forum.service;

import com.mason.forum.model.Article;
import com.mason.forum.model.vo.ArticleVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 马拉圈
 * Date: 2023-10-06
 * Time: 17:28
 */
public interface IArticleService {

    /**
     * 发布文章
     * @param article 文章信息
     */
    void publish(Article article);


    /**
     * 创建一篇文章
     * 1. 插入到文章表
     * 2. 更新板块的贴子数
     * 3. 更新作者的贴子数
     * 所以这是一个事务
     * @param article 要发布的帖子
     */
    @Transactional
    void create (Article article);

    /**
     * 查询所有帖子
     * @return 所有帖子（每一个包含简单的信息，以及作者的部分信息）
     */
    List<ArticleVO> selectAll();

    /**
     * 查询某个板块的帖子
     * @param boardId 板块id
     * @return 帖子列表
     */
    List<ArticleVO> selectAllByBoardId(Long boardId);

    /**
     * 根据帖子id查询帖子丰富的相关信息
     * @return 帖子丰富的相关信息（不需要成为一个事务）
     */
    ArticleVO selectDetailByAid(Long id);

    /**
     * 通过title和content，修改指定id的帖子（不支持修改板块）
     * @param id 帖子id
     * @param title 标题
     * @param content 正文
     */
    void modify(Long id, String title, String content);

    /**
     * 通过id查帖子（无表关联）
     * @param id 帖子id
     * @return
     */
    Article selectById(Long id);

    /**
     * 点赞
     * @param id 帖子id
     */
    void thumpUp(Long id);


    /**
     * 下架文章
     * @param id 帖子id
     */
    void offShelf(Long id);

    /**
     *  删除帖子
     * 1. 帖子删除状态置为1
     * 2. 更新板块的贴子数
     * 3. 更新作者的贴子数
     * 是一个事务
     * @param article 帖子
     */
    @Transactional
    void deleteById(Article article);


    /**
     * 帖子回复数+1
     * @param id 帖子id
     */
    void incrementReplyCount(@Param("id") Long id);

    /**
     * 获取用户的帖子列表
     * @param userId 板块id
     * @return 帖子列表
     */
    List<ArticleVO> selectAllByUserId(Long userId);




}
